from django.db.models import Q

from .models import Customer
import django_filters


class CustomerFilter(django_filters.rest_framework.FilterSet):
    """
    参数说明：
    field_name（必选）：模型类的属性
    lookup_expr（可选）：判断条件
        iexact：表示精确匹配, 并且忽略大小写
        icontains：表示模糊查询（包含），并且忽略大小写
        exact：表示精确匹配
        gte：用于规定范围，大于等于
        lte： 用于范围，小于等于
    method： 自己定义一个方法
    help_text： 帮助说明
    """
    GRADE_CHOICES = (
        ("A", "重要客户"),
        ("B", "优质客户"),
        ("C", "普通客户"),
    )
    PLATFORM_CHOICES = (
        (1, "淘宝专卖店"),
        (2, "京东专卖店"),
        (3, "拼多多专卖店"),
    )

    grade = django_filters.ChoiceFilter(field_name="grade", help_text="客户等级，选择查询", choices=GRADE_CHOICES)
    platform = django_filters.ChoiceFilter(field_name="platform", help_text="客户平台，选择查询", choices=PLATFORM_CHOICES)
    search = django_filters.CharFilter(method='search_filter', help_text="全局搜索，模糊查询")

    # 自定义全局搜索方法
    # 客户名，昵称，手机号，微信，QQ
    def search_filter(self, queryset, field_name, value):
        return queryset.filter(Q(name__icontains=value) | Q(nickname__icontains=value) | Q(telephone__icontains=value)
                               | Q(wechat__icontains=value) | Q(qq__icontains=value))

    class Meta:
        model = Customer
        fields = ('grade', 'platform')  # 允许精准查询的字段
        search_fields = ('search', )  # 允许模糊查询的字段